<?php

namespace Database\Factories;

use App\Models\Post;
use App\Models\Reply;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Reply>
 */
class ReplyFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        $faker = fake('zh_CN');

        // 真实的回复内容模板
        $replyPrefixes = [
            '说得很有道理',
            '我也遇到过类似的问题',
            '感谢分享',
            '学到了',
            '不错的方法',
            '我试试这个方法',
            '赞同楼主的观点',
            '补充一点',
            '个人觉得',
            '这个问题我也想知道',
            '根据我的经验',
            '我也有同样的疑问',
            '顶一下',
            '支持一下',
            '很有帮助',
            '感谢解答',
            '受教了',
            '有道理',
            '赞同',
            '我也这么觉得',
            '说得对',
            '学习了',
            '感谢楼主',
            '不错的分享',
            '收藏了',
            '值得一试',
            '有帮助',
            '明白了',
            '谢谢分享',
            '好文',
        ];

        $replyBodies = [
            '，我之前也是这样做的。',
            '，这个方法确实有效。',
            '，期待楼主更多分享。',
            '，希望能帮助到更多人。',
            '，大家可以参考一下。',
            '，有问题可以继续交流。',
            '，我补充一些细节。',
            '，希望对你有所帮助。',
            '，有什么问题随时问我。',
            '，继续加油！',
        ];

        $content = $faker->randomElement($replyPrefixes) . $faker->sentence(5, 15) . $faker->randomElement($replyBodies);
        // 有些回复可能更长
        if (fake()->boolean(30)) {
            $content .= "\n\n" . $faker->paragraph(1, 2);
        }

        return [
            'user_id' => User::inRandomOrder()->first()?->id ?? User::factory(),
            'post_id' => Post::inRandomOrder()->first()?->id ?? Post::factory(),
            'parent_id' => null, // 主回复，楼中楼在 Seeder 中处理
            'content' => $content,
            'like_count' => 0, // 将在 Seeder 中更新
        ];
    }

    /**
     * 设置为楼中楼回复（回复特定回复）
     */
    public function nested(Reply $parent): static
    {
        return $this->state(fn (array $attributes) => [
            'parent_id' => $parent->id,
            'post_id' => $parent->post_id, // 楼中楼回复必须属于同一个帖子
        ]);
    }
}
